package com.example;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author lzj
 * @since 获取一个类的信息
 */
public class TestClassInfo {
    public static void main(String s[]) throws Exception {
        Class clazz = Object.class;

        System.out.println(clazz.getName());

        // 所有public权限的   包括继承来的
        Method methods[] = clazz.getMethods();

        // 不问权限  不包括继承来的
        Method selfMethods[] = clazz.getDeclaredMethods();


        for (Method method : selfMethods) {
            //方法名
            System.out.println(method.getName());

            //返回类型名
            Class returnType = method.getReturnType();
            System.out.println(returnType.getName());

            //参数类型
            Class params[] = method.getParameterTypes();

            for (Class param : params) {
                System.out.println(param.getName());
            }
        }


        //类的public成员变量的信息
        Field fields[] = clazz.getFields();

        //自己声明的成员变量的信息 不问权限
        Field selfFields[] = clazz.getDeclaredFields();

        for (Field field : selfFields) {
            //变量名
            System.out.println(field.getName());
            //变量类型名
            System.out.println(field.getType().getName());
        }


        Constructor constructors[] = clazz.getConstructors();
        Constructor selfConstructors[] = clazz.getDeclaredConstructors();

        for (Constructor constructor : selfConstructors) {
            System.out.println(constructor.getName());
            Class paramTypes[] = constructor.getParameterTypes();
            for (Class paramType : paramTypes) {
                System.out.print(paramType.getName());
            }
        }
    }


    

}





